gtkplacessidebar: Stop using ::key-press-event
authorCarlos Garnacho <carlosg@gnome.org>
Mon, 5 Mar 2018 17:50:35 +0000 (18:50 +0100)
committerCarlos Garnacho <carlosg@gnome.org>
Thu, 5 Apr 2018 17:26:54 +0000 (19:26 +0200)
Use GtkEventControllerKey for the task

gtk/gtkplacessidebar.c

index 0d6c3ea68aae40c05b5b2ef795017f2b881cffc2..e670cd6ad08aca5a9b62b562fa4876976b8d2c9f 100644 (file)
@@ -62,6 +62,7 @@
 #include "gtkbox.h"
 #include "gtkmodelbutton.h"
 #include "gtkprivate.h"
+#include "gtkeventcontrollerkey.h"
 
 /*< private >
  * SECTION:gtkplacessidebar
@@ -174,6 +175,8 @@ struct _GtkPlacesSidebar {
 
   GActionGroup *action_group;
 
+  GtkEventController *list_box_key_controller;
+
   guint mounting               : 1;
   guint  drag_data_received    : 1;
   guint drop_occurred          : 1;
@@ -3382,67 +3385,62 @@ stop_shortcut_cb (GSimpleAction *action,
 }
 
 static gboolean
-on_key_press_event (GtkWidget        *widget,
-                    GdkEventKey      *event,
-                    GtkPlacesSidebar *sidebar)
+on_key_pressed (GtkEventControllerKey *controller,
+                guint                  keyval,
+                guint                  keycode,
+                GdkModifierType        state,
+                GtkPlacesSidebar      *sidebar)
 {
   guint modifiers;
   GtkListBoxRow *row;
-  guint keyval, state;
 
-  if (event &&
-      gdk_event_get_keyval ((GdkEvent *) event, &keyval) &&
-      gdk_event_get_state ((GdkEvent *) event, &state))
+  row = gtk_list_box_get_selected_row (GTK_LIST_BOX (sidebar->list_box));
+  if (row)
     {
-      row = gtk_list_box_get_selected_row (GTK_LIST_BOX (sidebar->list_box));
-      if (row)
-        {
-          modifiers = gtk_accelerator_get_default_mod_mask ();
-
-          if (keyval == GDK_KEY_Return ||
-              keyval == GDK_KEY_KP_Enter ||
-              keyval == GDK_KEY_ISO_Enter ||
-              keyval == GDK_KEY_space)
-            {
-              GtkPlacesOpenFlags open_flags = GTK_PLACES_OPEN_NORMAL;
+      modifiers = gtk_accelerator_get_default_mod_mask ();
 
-              if ((state & modifiers) == GDK_SHIFT_MASK)
-                open_flags = GTK_PLACES_OPEN_NEW_TAB;
-              else if ((state & modifiers) == GDK_CONTROL_MASK)
-                open_flags = GTK_PLACES_OPEN_NEW_WINDOW;
+      if (keyval == GDK_KEY_Return ||
+          keyval == GDK_KEY_KP_Enter ||
+          keyval == GDK_KEY_ISO_Enter ||
+          keyval == GDK_KEY_space)
+        {
+          GtkPlacesOpenFlags open_flags = GTK_PLACES_OPEN_NORMAL;
 
-              open_row (GTK_SIDEBAR_ROW (row), open_flags);
+          if ((state & modifiers) == GDK_SHIFT_MASK)
+            open_flags = GTK_PLACES_OPEN_NEW_TAB;
+          else if ((state & modifiers) == GDK_CONTROL_MASK)
+            open_flags = GTK_PLACES_OPEN_NEW_WINDOW;
 
-              return TRUE;
-            }
+          open_row (GTK_SIDEBAR_ROW (row), open_flags);
 
-          if (keyval == GDK_KEY_Down &&
-              (state & modifiers) == GDK_MOD1_MASK)
-            return eject_or_unmount_selection (sidebar);
+          return TRUE;
+        }
 
-          if ((keyval == GDK_KEY_Delete ||
-               keyval == GDK_KEY_KP_Delete) &&
-              (state & modifiers) == 0)
-            {
-              remove_bookmark (GTK_SIDEBAR_ROW (row));
-              return TRUE;
-            }
+      if (keyval == GDK_KEY_Down &&
+          (state & modifiers) == GDK_MOD1_MASK)
+        return eject_or_unmount_selection (sidebar);
 
-          if ((keyval == GDK_KEY_F2) &&
-              (state & modifiers) == 0)
-            {
-              rename_bookmark (GTK_SIDEBAR_ROW (row));
-              return TRUE;
-            }
+      if ((keyval == GDK_KEY_Delete ||
+           keyval == GDK_KEY_KP_Delete) &&
+          (state & modifiers) == 0)
+        {
+          remove_bookmark (GTK_SIDEBAR_ROW (row));
+          return TRUE;
+        }
 
-          if ((keyval == GDK_KEY_Menu) ||
-              ((keyval == GDK_KEY_F10) &&
-               (state & modifiers) == GDK_SHIFT_MASK))
+      if ((keyval == GDK_KEY_F2) &&
+          (state & modifiers) == 0)
+        {
+          rename_bookmark (GTK_SIDEBAR_ROW (row));
+          return TRUE;
+        }
 
-            {
-              popup_menu_cb (GTK_SIDEBAR_ROW (row));
-              return TRUE;
-            }
+      if ((keyval == GDK_KEY_Menu) ||
+          ((keyval == GDK_KEY_F10) &&
+           (state & modifiers) == GDK_SHIFT_MASK))
+        {
+          popup_menu_cb (GTK_SIDEBAR_ROW (row));
+          return TRUE;
         }
     }
 
@@ -4047,8 +4045,11 @@ gtk_places_sidebar_init (GtkPlacesSidebar *sidebar)
 
   g_signal_connect (sidebar->list_box, "row-activated",
                     G_CALLBACK (on_row_activated), sidebar);
-  g_signal_connect (sidebar->list_box, "key-press-event",
-                    G_CALLBACK (on_key_press_event), sidebar);
+
+  sidebar->list_box_key_controller =
+    gtk_event_controller_key_new (sidebar->list_box);
+  g_signal_connect (sidebar->list_box_key_controller, "key-pressed",
+                    G_CALLBACK (on_key_pressed), sidebar);
 
   sidebar->long_press_gesture = gtk_gesture_long_press_new (GTK_WIDGET (sidebar));
   gtk_gesture_single_set_touch_only (GTK_GESTURE_SINGLE (sidebar->long_press_gesture), TRUE);
@@ -4323,6 +4324,7 @@ gtk_places_sidebar_dispose (GObject *object)
   g_clear_pointer (&sidebar->rename_uri, g_free);
 
   g_clear_object (&sidebar->long_press_gesture);
+  g_clear_object (&sidebar->list_box_key_controller);
 
   if (sidebar->source_targets)
     {